package com.yidu.labyrinth.utils;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;


/**
 * @描述：树状下拉框工具类
 * @author 胡立
 * @packageName com.yidu.rm.utils
 * @version 创建时间：2019年9月28日 下午5:38:46
 */
public class MenuTreeUtil implements Serializable{

	/**
	 *
	 */
	private static final long serialVersionUID = 4368181022467390903L;


	private String pid;
	private String id; // 树的节点Id，区别于数据库中保存的数据Id。
	private String name;
	private String moduleUrl;//模块地址
	// 点击节点触发的链接
	private List<MenuTreeUtil> children = new ArrayList<MenuTreeUtil>(); // 子节点，可以用递归的方法读取

	/**
	 * 生成一颗多叉树，根节点为root
	 *
	 * @param nodes
	 *            生成多叉树的节点集合
	 * @return root
	 */
	public List<MenuTreeUtil> createTree(List<MenuTreeUtil> nodes) {
		if (nodes == null || nodes.size() < 0)
			return null;
		List<MenuTreeUtil> nodeList = new ArrayList<>();// 根节点自定义，但是要和pid对应好
		// 将所有节点添加到多叉树中
		for (MenuTreeUtil node : nodes) {
			if (node.getPid().equals("1")) {// 根节点自定义，但是要和pid对应好
				// 向根添加一个节点
				nodeList.add(node);
			} else {
				addChild(nodes, node);
			}
		}
		return nodeList;
	}

	/**
	 * 向指定多叉树节点添加子节点
	 *
	 * @param nodes
	 *            多叉树节点
	 * @param child
	 *            节点
	 */
	public void addChild(List<MenuTreeUtil> nodes, MenuTreeUtil child) {
		//System.out.println("nodes"+nodes);

		for (MenuTreeUtil item : nodes) {
			if (item.getId().equals(child.getPid())) {
				// 找到对应的父亲
				//System.out.println("2"+child);	 
				item.getChildren().add(child);
				break;
			}
		}
	}

	public MenuTreeUtil() {
	}



	@Override
	public String toString() {
		return "Node [pid=" + pid + ", id=" + id + ", name=" + name + ", children=" + children + "]";
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((children == null) ? 0 : children.hashCode());
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result + ((pid == null) ? 0 : pid.hashCode());
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		MenuTreeUtil other = (MenuTreeUtil) obj;
		if (children == null) {
			if (other.children != null)
				return false;
		} else if (!children.equals(other.children))
			return false;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (pid == null) {
			if (other.pid != null)
				return false;
		} else if (!pid.equals(other.pid))
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		if (moduleUrl == null) {
			if (other.moduleUrl != null)
				return false;
		} else if (!moduleUrl.equals(other.moduleUrl))
			return false;
		return true;
	}

	public String getModuleUrl() {
		return moduleUrl;
	}

	public void setModuleUrl(String moduleUrl) {
		this.moduleUrl = moduleUrl;
	}

	public String getPid() {
		return pid;
	}

	public void setPid(String pid) {
		this.pid = pid;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public List<MenuTreeUtil> getChildren() {
		return children;
	}

	public void setChildren(List<MenuTreeUtil> children) {
		this.children = children;
	}

	public MenuTreeUtil(String pid, String id, String name,String moduleUrl, List<MenuTreeUtil> children) {
		super();
		this.moduleUrl = moduleUrl;
		this.pid = pid;
		this.id = id;
		this.name = name;
		this.children = children;
	}





	/*
	 * public static Map<String,Object> mapArray = new LinkedHashMap<String,
	 * Object>(); public List<ModuleVo> menuCommon; public List<Object> list = new
	 * ArrayList<Object>();
	 *
	 * public List<Object> menuList(List<ModuleVo> menu){ //controller层调用的方法
	 * ，并将数据以list的形式返回 this.menuCommon = menu; for (ModuleVo x : menu) {
	 * Map<String,Object> mapArr = new LinkedHashMap<String, Object>();
	 * if(x.getModModuleId().equals(0)){ //判断是否为父极 mapArr.put("moduleId",
	 * x.getModuleId()); mapArr.put("moduleName", x.getModuleName());
	 *
	 * mapArr.put("child", menuChild(x.getModuleId())); //去子集查找遍历 list.add(mapArr);
	 * } } return list; }
	 *
	 * public List<Object> menuChild(Integer id){ //子集查找遍历 List<Object> lists = new
	 * ArrayList<Object>(); for(ModuleVo a:menuCommon){ Map<String,Object>
	 * childArray = new LinkedHashMap<String, Object>();
	 * if(a.getModModuleId().equals(id) ){ childArray.put("id", a.getModuleId());
	 * childArray.put("tree_name", a.getModuleName());
	 *
	 * childArray.put("child", menuChild(a.getModuleId())); lists.add(childArray); }
	 * } return lists; }
	 */
}
